summaryrefslogtreecommitdiff
path: root/app/[lng]/pending
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-06-30 08:28:13 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-06-30 08:28:13 +0000
commit5b6313f16f508882a0ea67716b7dbaa1c6967f04 (patch)
tree3d1d8dafea2f31274ace3fbda08333e889e06d1c /app/[lng]/pending
parent3f0fad18483a5c800c79c5e33946d9bb384c10e2 (diff)
(대표님) 20250630 16시 - 유저 도메인별 라우터 분리와 보안성검토 대응
Diffstat (limited to 'app/[lng]/pending')
-rw-r--r--app/[lng]/pending/layout.tsx42
-rw-r--r--app/[lng]/pending/page.tsx129
2 files changed, 171 insertions, 0 deletions
diff --git a/app/[lng]/pending/layout.tsx b/app/[lng]/pending/layout.tsx
new file mode 100644
index 00000000..2f767d1d
--- /dev/null
+++ b/app/[lng]/pending/layout.tsx
@@ -0,0 +1,42 @@
+import { UserProfileBadge } from "@/components/layout/user-profile-badge"
+import Image from "next/image"
+import { authOptions } from "@/app/api/auth/[...nextauth]/route"
+import { getServerSession } from "next-auth/next"
+export default async function PendingLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ const session = await getServerSession(authOptions)
+
+ return (
+ <div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100">
+ {/* 헤더 없음 - 단순한 로고만 */}
+ <div className="w-full py-4 px-6">
+ <div className="flex justify-between items-center">
+ <div className="flex items-center gap-2">
+ <Image
+ className="dark:invert"
+ src="/images/vercel.svg"
+ alt="EVCP Logo"
+ width={20}
+ height={20}
+ />
+ <span className="text-lg font-bold text-gray-800">eVCP</span>
+ </div>
+
+ {/* 간단한 사용자 정보만 */}
+ <UserProfileBadge user={session?.user} />
+ </div>
+ </div>
+
+ {/* 메인 컨텐츠 */}
+ <main className="container mx-auto px-6 py-8">
+ {children}
+ </main>
+ </div>
+ )
+}
+
+
+
diff --git a/app/[lng]/pending/page.tsx b/app/[lng]/pending/page.tsx
new file mode 100644
index 00000000..0800e5d2
--- /dev/null
+++ b/app/[lng]/pending/page.tsx
@@ -0,0 +1,129 @@
+// app/pending/page.tsx
+import { Card } from "@/components/ui/card"
+import { Button } from "@/components/ui/button"
+import {
+ UserCheck,
+ Clock,
+ HelpCircle,
+ FileText,
+ Mail,
+ BookOpen
+} from "lucide-react"
+import { authOptions } from "@/app/api/auth/[...nextauth]/route"
+import { getServerSession } from "next-auth/next"
+
+export default async function PendingPage() {
+ const session = await getServerSession(authOptions)
+
+
+ return (
+ <div className="max-w-4xl mx-auto space-y-8">
+ {/* 환영 카드 */}
+ <Card className="p-8 text-center bg-white shadow-lg">
+ <div className="space-y-4">
+ <div className="w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto">
+ <UserCheck className="w-8 h-8 text-blue-600" />
+ </div>
+
+ <div>
+ <h1 className="text-3xl font-bold text-gray-900 mb-2">
+ 환영합니다, {session?.user?.name}님!
+ </h1>
+ <p className="text-gray-600 text-lg">
+ eVCP 시스템에 가입해주셔서 감사합니다.
+ </p>
+ </div>
+ </div>
+ </Card>
+
+ {/* 상태 안내 */}
+ <Card className="p-6">
+ <div className="flex items-start gap-4">
+ <div className="w-12 h-12 bg-yellow-100 rounded-full flex items-center justify-center flex-shrink-0">
+ <Clock className="w-6 h-6 text-yellow-600" />
+ </div>
+
+ <div className="flex-1">
+ <h2 className="text-xl font-semibold text-gray-900 mb-2">
+ 계정 승인 대기 중
+ </h2>
+ <p className="text-gray-600 mb-4">
+ 귀하의 계정이 현재 승인 대기 중입니다. 담당자가 검토 후 적절한 권한을 부여해드릴 예정입니다.
+ </p>
+
+ <div className="bg-gray-50 rounded-lg p-4">
+ <h3 className="font-medium text-gray-900 mb-2">다음 단계:</h3>
+ <ul className="space-y-1 text-sm text-gray-600">
+ <li>• 관리자가 귀하의 소속 부서를 확인합니다</li>
+ <li>• 적절한 시스템 권한이 부여됩니다</li>
+ <li>• 이메일로 승인 완료 알림을 받게 됩니다</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </Card>
+
+ {/* 연락처 정보 */}
+ <div className="grid md:grid-cols-2 gap-6">
+ <Card className="p-6">
+ <div className="flex items-start gap-4">
+ <div className="w-10 h-10 bg-green-100 rounded-full flex items-center justify-center">
+ <HelpCircle className="w-5 h-5 text-green-600" />
+ </div>
+ <div>
+ <h3 className="font-semibold text-gray-900 mb-2">도움이 필요하신가요?</h3>
+ <p className="text-gray-600 text-sm mb-3">
+ 시스템 사용법이나 계정 관련 문의사항이 있으시면 언제든 연락해주세요.
+ </p>
+ <Button variant="outline" size="sm" asChild>
+ <a href="mailto:support@evcp.com">
+ <Mail className="w-4 h-4 mr-2" />
+ 지원팀 연락하기
+ </a>
+ </Button>
+ </div>
+ </div>
+ </Card>
+
+ <Card className="p-6">
+ <div className="flex items-start gap-4">
+ <div className="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center">
+ <FileText className="w-5 h-5 text-blue-600" />
+ </div>
+ <div>
+ <h3 className="font-semibold text-gray-900 mb-2">사용자 가이드</h3>
+ <p className="text-gray-600 text-sm mb-3">
+ 미리 시스템 사용법을 확인하고 싶으시다면 가이드를 참고하세요.
+ </p>
+ <Button variant="outline" size="sm" asChild>
+ <a href="/guide" target="_blank">
+ <BookOpen className="w-4 h-4 mr-2" />
+ 가이드 보기
+ </a>
+ </Button>
+ </div>
+ </div>
+ </Card>
+ </div>
+
+ {/* 시스템 정보 */}
+ <Card className="p-6 bg-gray-50">
+ <h3 className="font-semibold text-gray-900 mb-4">eVCP 시스템 소개</h3>
+ <div className="grid md:grid-cols-3 gap-4 text-sm">
+ <div>
+ <h4 className="font-medium text-gray-900 mb-1">구매관리</h4>
+ <p className="text-gray-600">견적, 입찰, 발주 관리</p>
+ </div>
+ <div>
+ <h4 className="font-medium text-gray-900 mb-1">기술영업</h4>
+ <p className="text-gray-600">프로젝트 영업 지원</p>
+ </div>
+ <div>
+ <h4 className="font-medium text-gray-900 mb-1">설계관리</h4>
+ <p className="text-gray-600">설계 기준정보 확인 및 TBE</p>
+ </div>
+ </div>
+ </Card>
+ </div>
+ )
+} \ No newline at end of file